package com.dd.controller;

import com.dd.entity.Categories;
import com.dd.entity.R;
import com.dd.enums.HttpEnum;
import com.dd.service.ICategoriesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author dhd
 * @since 2024-10-21
 */
@RestController
@RequestMapping("categories")
public class CategoriesController {
    /**
     * 服务对象
     */
    @Autowired
    ICategoriesService categoriesService;

    /**
     * 分页查询
     *
     * @param categories 筛选条件
     * @param pageNum    分页对象
     * @return 查询结果
     */
    @GetMapping
    public R queryByPage(Categories categories, Integer pageNum) {
        return R.success(categoriesService.queryByPage(categories, pageNum));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public R queryById(@PathVariable("id") Integer id) {
        Categories categories = categoriesService.queryById(id);
        try{
            if (categories.getCategoryId() <= 0 || categories.getCategoryName() == null) {
                return R.fail(HttpEnum.WARN.getCode(), "没有该分类");
            }
            return R.success(categories);
        }catch (Exception e){
            return R.fail(HttpEnum.WARN.getCode(),e.getMessage());
        }
    }

    /**
     * 新增数据
     *
     * @param categories 实体
     * @return 新增结果
     */
    @PostMapping
    public R add(@RequestBody Categories categories) {
        if (categoriesService.insert(categories) > 0) {
            return R.success(categories);
        }
        return R.fail(HttpEnum.WARN.getCode(), "添加失败");
    }

    /**
     * 编辑数据
     *
     * @param categories 实体
     * @return 编辑结果
     */
    @PutMapping
    public R edit(@RequestBody Categories categories) {
        if (categoriesService.update(categories) > 0) {
            return R.success(categories);
        }
        return R.fail(HttpEnum.WARN.getCode(), "编辑失败");
    }

    /**
     * 删除数据
     *
     * @param id 主键
     * @return 删除是否成功
     */
    @DeleteMapping("{id}")
    public R deleteById(@PathVariable("id") Integer id) {
        if (categoriesService.deleteById(id) > 0) {
            return R.success("删除成功");
        }
        return R.fail(HttpEnum.WARN.getCode(), "删除失败");
    }


    /**
     * 获取类别列表
     * @return 获取是否成功
     */
    @GetMapping("list")
    public R list() {
        return R.success(categoriesService.list());
    }
}